/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cgd;

import cdp.Produto;
import cdp.Relatorio;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.persistence.Query;
import javax.persistence.TemporalType;

/**
 *
 * @author CDIG01
 */
public class DaoJpaRelatorio extends DaoJpa<Relatorio> {
    
    public List<Relatorio> buscarPeriodo(Date d1, Date d2) throws Exception {
        List<Relatorio> relatorio = new ArrayList<Relatorio>();
        try {
            Query q = em.createQuery("SELECT SUM(x.quantidade), x.produto "
                    + " FROM Relatorio x "
                    + " WHERE x.data BETWEEN :d1 AND :d2 "
                    + " GROUP BY x.produto")
                    .setParameter("d1", d1, TemporalType.DATE)
                    .setParameter("d2", d2, TemporalType.DATE);
            List resultado = q.getResultList();
            if(resultado.size() > 0) {
                for(Object obj : resultado) {
                    Object []linha = (Object[])obj;
                    Relatorio rel = new Relatorio();
                    rel.setQuantidade(((Long)linha[0]).intValue());
                    rel.setProduto((Produto)linha[1]);
                    relatorio.add(rel);
                }
            }
        } catch (Exception ex) {
            throw ex;
        }
        return relatorio;
    }
    
    public Relatorio buscarProdutoDia(Produto p, Date d) throws Exception {
        try {
            Query q = em.createQuery("SELECT x "
                    + " FROM Relatorio x "
                    + " WHERE x.produto = :produto "
                    + "     AND x.data BETWEEN :d1 AND :d2")
                    .setParameter("produto", p)
                    .setParameter("d1", d)
                    .setParameter("d2", d);
            if(q.getResultList().size() == 1)
                return (Relatorio)q.getResultList().get(0);
            else
                return null;
        } catch (Exception ex) {
            throw ex;
        }
    }
}
